#-------------------------------------------------------------------------------
#
#	Name    : BasAsm
#	Purpose : StrongED mode file for BASIC assembler source files
#	Author  :  Guttorm Vik
#	Licence : Freeware
#	Version : 1.01, 03-11-02
#
#	Assembly may be started with F10.
#
#-------------------------------------------------------------------------------

HelpPath	BASIC,Assembly,Wimp,OS,MiscSWIs,INetSWIs,Toolbox,OSLib,UnixLib

ID_FirstChar	A-Za-z_
ID_Middle	A-Za-z_0-9
ID_LastChar	$%

#----------------------------------------------------------------------

# Immediate commands :
# APPEND AUTO DELETE EDIT HELP LIST LISTO LOAD LVAR NEW OLD
# RENUMBER RUN SAVE TWIN TWINO

Search
	_Indent2	{" "} [ (("REM") | (";"~":")) {" "} ]
	Bchar		Alpha   |"_"|"`"
	Bchar2		AlphaNum|"_"|"`"
	_MarkWord	(Bchar {Bchar2} ["%"|"$"]) | ("&" {Hex}+) | {Digit}+
	_MoveWord	(Bchar {Bchar2} ["%"|"$"]) | ("&" {Hex}+) | {Digit}+
	Func		"DEF" {" "} "PROC"|"FN" @0 Bchar {Bchar|Digit}
	GoLabel		[";:"] "." CW ~Bchar2
	Label		[";:"] "." Bchar {Bchar2}
	Fold_Start	Label
	Fold_End	("MOV" * "PC,") | ("LDM" * "PC")
	Flt_Opt		"al" | "eq" | "ne" | "cc" | "cs" | "mi" | "pl" | "nv" | "vc" | "vs" | "hi" | "ls" | "ge" | "lt" | "gt" | "le" | "hs" | "lo"
	Flt_Rnd		"n" | "p" | "m" | "z"
	Flt_Pre		"s" | "d" | "e" | "p"
#	Flt_Asm		[Flt_Opt] [Flt_Pre] [Flt_Rnd] " "
	Flt_Asm		([Flt_Opt] [Flt_Pre] [Flt_Rnd]) " "

#------ The following are used in the clicklist to 'toggle' various strings

	C_SWI		"SYS" | "SWI" [??] _spct '"' @0 * (@9 '"')
	C_LDM		"LDM"
	C_STM		"STM"
	C_LDMpc		"LDM" @1 * (@2 "PC}" ["^"])
	C_STMlr		"STM" @1 * (@2 "LR}")
	C_LDR		"LDR"
	C_STR		"STR"
	C_ADD		"ADD"
	C_SUB		"SUB"
	C_MOV		"MOV"
	C_MVN		"MVN"
End

SyntaxOptions
	SingleQuote	No
	DoubleQuote	Yes
	QuoteQuote	Yes
	SplitString	No
	HexPrefix	&
	BinPrefix	%
End

SyntaxComment 1
	Type		OneLine
	StartWith	;
	EndWith		:
End

#SyntaxComment 2
#	Type		OneLine
#	StartWith	REM
#End

SyntaxWords Group1 EndAsm nocase
	ADC ADD AND BIC CMN CMP EOR MLA MOV MUL
	MVN ORR RSB RSC SBC SUB SWI TEQ TST
	LDR STR
	ADR
# ARM3 instructions
	SWP
# ARM6 instructions
	MRS MSR
# ARM7M instructions
	UMULL SMULL UMLAL SMLAL
# StrongARM instructions
	LDRH STRH LDRSH STRSH LDRSB STRSB
End

SyntaxWords Group2 EndSTM nocase
	LDM STM
End

SyntaxWords Group3 EndNonID nocase
	R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15
	F0 F1 F2 F3 F4 F5 F6 F7
# APCS-R registers
	A1 A2 A3 A4 V1 V2 V3 V4 V5 V6 IP FP SP LR PC
# PSR specifiers
	CPSR CPSR_f CPSR_c CPSR_x CPSR_s
	SPSR SPSR_f SPSR_c SPSR_x SPSR_s
End

SyntaxWords Group4 EndBL nocase
	B
End

SyntaxWords Group5 EndNonID nocase
	OPT ALIGN
	DCB DCW DCD EQUB EQUW EQUD EQUS
End

SyntaxWords Group6 EndNonID nocase
	LSR LSL ASR ASL ROR RRX
End

SyntaxWords Group7 EndAsm nocase
#	:.
	ABS ACS ASN ATN COS EXP LGN LOG MNF MVF NRM RND SIN SQT TAN URD
	ADF DVF FDV FML FRD MUF POL POW RDF RMF RPW RSF SUF
	FIX FLT RFS RFC WFC WFS
	CMF CNF CMFE CNFE
	LDF STF
End

SyntaxWords Group8 StartSpace EndOfID nocase
	.
End

#----------------------------------------------------------------------


Replace
	R_LDMpc		"LDM" @12 "PC}^"
	R_STMlr		"STM" @12 "LR}"
End

FoldParm1 (Fold_Start,Fold_End)
#FoldParm2 (Label,"STM*PC",startofline)

Clicklist Toggle
	C_SWI		HelpString("SWI <tmp$word>",GSTrans)
	C_STMlr		ToggleStr(R_LDMpc)
	C_LDMpc		ToggleStr(R_STMlr)
	C_STM		ToggleStr("LDM")
	C_LDM		ToggleStr("STM")
	C_STR		ToggleStr("LDR")
	C_LDR		ToggleStr("STR")
	C_ADD		ToggleStr("SUB")
	C_SUB		ToggleStr("ADD")
	C_MOV		ToggleStr("MVN")
	C_MVN		ToggleStr("MOV")
End

#----------------------------------------------------------------------

KeyList
	^D,^F		InsertStr ("FN_ForceDebug")
	^D,^R		InsertStr ("FN_RestoreDebug")
	^D,^D		InsertStr ("FN_Debug(pass%,\"\")")
	^Delete		InsertStr(":") DeleteRight
	^Return		NewLine(indent,_Indent2)
End

#----------------------------------------------------------------------

Functions

	Key	F2
	Menu	List DEF PROC/FN  F2
	Icon	LoF
	Select	ListOfFound (Label,Text,Whole,Line,Case,Sort)
	Help	HBa_lof

	Adjust	ListOfFound (Label,All,Whole,Line,Case,Sort)

	Select	ListOfFound (Func,Text,Whole,Line,Case,Sort)

	Adjust	ListOfFound (Func,All,Whole,Line,Case,Sort)

	Key	PgUp
	Icon	up
	Select	GotoPrev (Label,Text,Line,Case)
	Help	HBa_up

	Key	^PgUp
	Adjust	GotoPrev (Func,Text,Line,Case)

	Key	PgDown
	Icon	down
	Select	GotoNext (Label,Text,Line,Case)
	Help	HBa_dn

	Key	^PgDown
	Adjust	GotoNext (Func,Text,Line,Case)

	Key	F10
	Menu	Run                F10
	Icon	run
	Help	HBa_run
	Select	SetTmp() RunBasic()

	Key	F10
	Select	SetTmp() RunBasic(Save)

	Key	^F10
	Adjust	SetTmp() RunBasic(,,Taskwindow)

	Key	^F10
	Adjust	SetTmp() RunBasic(Save,,Taskwindow)

	Key	^G
	Menu	Goto label/DEF PROC/FN
	Icon	goto
	Select	Push GotoFound(GoLabel,Text,Whole,Line,Case) Position(Top,5)
	Help	HBa_go

	Key	^G
	Adjust	Push GotoFound(GoLabel,All,Whole,Line,Case)

	Key	^G 2
	Select	Pop

	Key	^G 2
	Adjust	Pop
End

#----------------------------------------------------------------------

Shortcuts
	STM{	STMFD   R13!,{R0-R12,LR}\n\n\i\@\n\n\iLDMFD   R13!,{R0-R12,PC}
	STMS{	STMFD   R13!,{R0-R12,LR}\n\n\i\@\n\n\iLDMFD   R13!,{R0-R12,PC}^
	LDM{	LDMFD   R13!,{R0-R12,PC}
	LDMS{	LDMFD   R13!,{R0-R12,PC}^
	``-	;-------------------------------------------------------------------------------\n
	``=	;===============================================================================\n
End
